MVVM প্যাটার্নে Button Command এবং RelayCommand দুটি গুরুত্বপূর্ণ কনসেপ্ট। এগুলি ViewModel-এ বিজনেস লজিক বা অ্যাকশন সংজ্ঞায়িত করার জন্য ব্যবহৃত হয়, যাতে View-এ UI ইন্টারঅ্যাকশনের মাধ্যমে কার্যক্রম শুরু করা যায়। এই প্যাটার্নটি View এবং ViewModel এর মধ্যে পরিষ্কার বিভাজন বজায় রাখে এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
Button Command হল একটি কৌশল যার মাধ্যমে একটি বাটনের ক্লিক ইভেন্ট পরিচালনা করা হয়, যা মূলত ViewModel-এ থাকা কোনো কমান্ডের সাথে বাইন্ড করা হয়। এই পদ্ধতিতে View থেকে ViewModel-এ কাজের নির্দেশ পাঠানো হয়, এবং এতে ViewModel কোডের মাধ্যমে কার্যক্রম সম্পাদিত হয়।
ধরা যাক, আমরা একটি LoginCommand তৈরি করতে যাচ্ছি যা Login বাটন ক্লিক করলে ViewModel-এ থাকা একটি মেথড কল করবে।
public class LoginViewModel
{
private ICommand _loginCommand;
// ICommand প্রপার্টি
public ICommand LoginCommand
{
get
{
if (_loginCommand == null)
{
_loginCommand = new RelayCommand(Login, CanLogin);
}
return _loginCommand;
}
}
// Login অ্যাকশন
private void Login(object parameter)
{
// এখানে Login লজিক থাকবে
Console.WriteLine("User logged in successfully.");
}
// Login কি সম্ভব তা চেক করা
private bool CanLogin(object parameter)
{
// যদি ইউজারনেম এবং পাসওয়ার্ড ভ্যালিড হয়, তবেই লগইন সম্ভব
return !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password);
}
// User credentials
public string Username { get; set; }
public string Password { get; set; }
}
এখানে, RelayCommand ক্লাসের মাধ্যমে LoginCommand কমান্ড তৈরি করা হয়েছে। এই কমান্ডের দুটি অংশ রয়েছে:
Login
: যেখানে লগইন লজিক থাকে।CanLogin
: যা চেক করে লগইন করা যাবে কিনা (যেমন, ইউজারনেম এবং পাসওয়ার্ড ফিল্ডের অবস্থা)।এখন XAML এ এই কমান্ডটি বাইন্ড করা হবে:
<Button Content="Login" Command="{Binding LoginCommand}" />
এখানে, Button এর Command
প্রপার্টি LoginCommand-এর সাথে বাইন্ড করা হয়েছে, যাতে বাটন ক্লিক করলে LoginCommand এর Execute
মেথড চালু হয়।
RelayCommand হল একটি কাস্টম কমান্ড ক্লাস যা সাধারণত MVVM প্যাটার্নে ব্যবহৃত হয়। এটি ICommand ইন্টারফেসের একটি সাধারণ বাস্তবায়ন (implementation), যা ViewModel থেকে UI ইন্টারঅ্যাকশনের সাথে যুক্ত কাজগুলো (যেমন বাটন ক্লিক) পরিচালনা করতে সাহায্য করে।
RelayCommand সাধারণত দুইটি প্যারামিটার নেয়:
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Predicate<object> _canExecute;
public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
এখানে:
_execute
: এটি Action যা কমান্ডটি কার্যকর করার জন্য ব্যবহার হয় (যেমন, লগইন প্রক্রিয়া)।_canExecute
: এটি Predicate যা চেক করে যে, কমান্ডটি কার্যকর হওয়া উচিত কি না (যেমন, ইনপুট ফিল্ডের মান ভ্যালিড কিনা)।Button Command এবং RelayCommand MVVM প্যাটার্নে UI ইন্টারঅ্যাকশনের সাথে বিজনেস লজিকের সংযোগকে সহজ করে তোলে এবং কোডের পুনঃব্যবহারযোগ্যতা, টেস্টেবিলিটি এবং মেইনটেনেবল কোড নিশ্চিত করতে সাহায্য করে। RelayCommand ক্লাসের মাধ্যমে ICommand ইন্টারফেসের কার্যকরী বাস্তবায়ন করা হয়, যা ViewModel এবং View এর মধ্যে যোগাযোগ সহজ করে দেয়।
common.read_more